/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.io.IOException;
import java.io.OutputStream;
import java.net.URL;
import java.sql.Connection;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.ConnectionFactory;
import model.beans.Cliente;
import model.beans.Pedido;
import model.beans.TipoProduto;
import model.beans.TipoUsuario;
import model.beans.Usuario;
import model.negocio.ClienteNegocio;
import model.negocio.ComparaData;
import model.negocio.PedidoNegocio;
import model.negocio.TipoProdutoNegocio;
import model.negocio.TipoUsuarioNegocio;
import model.negocio.UsuarioNegocio;
import net.sf.jasperreports.engine.JasperRunManager;

/**
 *
 * @author Carol
 */
@WebServlet(name = "Controladora", urlPatterns = {"/Controladora"})
public class Controladora extends HttpServlet {

    /**
     * Processes requests for both HTTP
     * <code>GET</code> and
     * <code>POST</code> methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, ParseException {
        String action = request.getParameter("action");
        
        //Cadastro do Usuario
        if(action.equals("CadastrarUsuario")){
            String nrMatricula = request.getParameter("nmMatricula");
            String nome = request.getParameter("nome");
            String email = request.getParameter("email");
            String senha = request.getParameter("senha");
            String tipoUsuario = request.getParameter("tipoUsuario");
            int tp = Integer.parseInt(tipoUsuario);
            
            Usuario usuario = new Usuario();
            usuario.setEmail(email);
            usuario.setNome(nome);
            usuario.setSenha(senha);
            TipoUsuario tpUsuario = new TipoUsuario(tp);
            usuario.setTpUsuario(tpUsuario);
            
            UsuarioNegocio negocio = new UsuarioNegocio();
            
            if(nrMatricula.equals("")){
                List<Object> listaValida = negocio.validaDados(usuario);
                boolean valida = (Boolean)listaValida.get(0);
                if(!valida){
                    request.setAttribute("msg", listaValida.get(1));
                    List<Usuario> listaUsuario = negocio.listar();
                    TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                    List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                    for(Usuario u : listaUsuario){
                        for(TipoUsuario tu : listaTipoUsuario){
                            if(tu.getId() == u.getTpUsuario().getId()){
                                u.setTpUsuario(tu);
                            }
                        }
                    }
                    request.setAttribute("listaUsuario", listaUsuario);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                    rd.forward(request, response);
                }else{
                    if(negocio.salvar(usuario)){
                        request.setAttribute("msg", "Usuário inserido com sucesso!");
                        List<Usuario> listaUsuario = negocio.listar();
                        TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                        List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                        for(Usuario u : listaUsuario){
                            for(TipoUsuario tu : listaTipoUsuario){
                                if(tu.getId() == u.getTpUsuario().getId()){
                                    u.setTpUsuario(tu);
                                }
                            }
                        }
                        request.setAttribute("listaUsuario", listaUsuario);
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                        rd.forward(request, response);
                    }else{
                        List<Usuario> listaUsuario = negocio.listar();
                        TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                        List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                        for(Usuario u : listaUsuario){
                            for(TipoUsuario tu : listaTipoUsuario){
                                if(tu.getId() == u.getTpUsuario().getId()){
                                    u.setTpUsuario(tu);
                                }
                            }
                        }
                        request.setAttribute("listaUsuario", listaUsuario);
                        request.setAttribute("msg", "Erro ao inserir o usuário");
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                        rd.forward(request, response);
                    }
                }
            }else{
                int nr = Integer.parseInt(nrMatricula);
                usuario.setNrMatricula(nr);
                if(negocio.alterar(usuario)){
                    request.setAttribute("msg", "Usuário alterado com sucesso!");
                    List<Usuario> listaUsuario = negocio.listar();
                    TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                    List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                    for(Usuario u : listaUsuario){
                        for(TipoUsuario tu : listaTipoUsuario){
                            if(tu.getId() == u.getTpUsuario().getId()){
                                u.setTpUsuario(tu);
                            }
                        }
                    }
                    request.setAttribute("listaUsuario", listaUsuario);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                    rd.forward(request, response);
                }else{
                    List<Usuario> listaUsuario = negocio.listar();
                    TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                    List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                    for(Usuario u : listaUsuario){
                        for(TipoUsuario tu : listaTipoUsuario){
                            if(tu.getId() == u.getTpUsuario().getId()){
                                u.setTpUsuario(tu);
                            }
                        }
                    }
                    request.setAttribute("listaUsuario", listaUsuario);
                    request.setAttribute("msg", "Erro ao alterar o usuário");
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                    rd.forward(request, response);
                }
            }
        }
        
        //Listar Usuários
        if(action.equals("ListarUsuario")){
            UsuarioNegocio negocio = new UsuarioNegocio();
            List<Usuario> listaUsuario = negocio.listar();
            TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
            List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
            for(Usuario u : listaUsuario){
                for(TipoUsuario tu : listaTipoUsuario){
                    if(tu.getId() == u.getTpUsuario().getId()){
                        u.setTpUsuario(tu);
                    }
                }
            }
            request.setAttribute("listaUsuario", listaUsuario);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            rd.forward(request, response);
        }
        
        //Buscar Usuário
        if(action.equals("BuscarUsuario")){
            String idUsuario = request.getParameter("idEdita");
            int id = Integer.parseInt(idUsuario);
            UsuarioNegocio negocio = new UsuarioNegocio();
            Usuario usuario = negocio.buscar(id);
            request.setAttribute("usuario", usuario);
            List<Usuario> listaUsuario = negocio.listar();
            TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
            List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
            for(Usuario u : listaUsuario){
                for(TipoUsuario tu : listaTipoUsuario){
                    if(tu.getId() == u.getTpUsuario().getId()){
                        u.setTpUsuario(tu);
                    }
                }
            }
            request.setAttribute("listaUsuario", listaUsuario);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
            rd.forward(request, response);
        }
        
        //Delatar usuários
        if(action.equals("DeletarUsuario")){
            String idUsuario = request.getParameter("idDel");
            int id = Integer.parseInt(idUsuario);
            UsuarioNegocio negocio = new UsuarioNegocio();
            if(negocio.deletar(id)){
                request.setAttribute("msg", "Usuário excluído com sucesso!");
                List<Usuario> listaUsuario = negocio.listar();
                TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                for(Usuario u : listaUsuario){
                    for(TipoUsuario tu : listaTipoUsuario){
                        if(tu.getId() == u.getTpUsuario().getId()){
                            u.setTpUsuario(tu);
                        }
                    }
                }
                request.setAttribute("listaUsuario", listaUsuario);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                rd.forward(request, response);
            }else{
                List<Usuario> listaUsuario = negocio.listar();
                TipoUsuarioNegocio tuNegocio = new TipoUsuarioNegocio();
                List<TipoUsuario> listaTipoUsuario = tuNegocio.listar();
                for(Usuario u : listaUsuario){
                    for(TipoUsuario tu : listaTipoUsuario){
                        if(tu.getId() == u.getTpUsuario().getId()){
                            u.setTpUsuario(tu);
                        }
                    }
                }
                request.setAttribute("listaUsuario", listaUsuario);
                request.setAttribute("msg", "Erro ao tentar excluir o usuário");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_usuario.jsp");
                rd.forward(request, response);
            }
            
        }
        
        //Cadastro do Cliente
        if(action.equals("CadastrarCliente")){
            String idCliente = request.getParameter("idCliente");
            String nome = request.getParameter("nome");
            String cpf = request.getParameter("cpf");
            String dt = request.getParameter("dtNasc");
            String sexo = request.getParameter("sexo");
            String endereco = request.getParameter("endereco");
            String email = request.getParameter("email");
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dataNasc = (Date)formatter.parse(dt); 
            
            Cliente cliente = new Cliente(nome, cpf, dataNasc, sexo, endereco, email);
            
            ClienteNegocio negocio = new ClienteNegocio();
            
            if(idCliente.equals("")){
                List<Object> listaValida = negocio.validaDados(cliente);
                boolean valida = (Boolean)listaValida.get(0);
                if(!valida){
                    request.setAttribute("msg", listaValida.get(1));
                    List<Cliente> listaCliente = negocio.listar();
                    request.setAttribute("listaCliente", listaCliente);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                    rd.forward(request, response);
                }else{
                    if(negocio.salvar(cliente)){
                        request.setAttribute("msg", "Cliente inserido com sucesso!");
                        List<Cliente> listaCliente = negocio.listar();
                        request.setAttribute("listaCliente", listaCliente);
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                        rd.forward(request, response);
                    }else{
                        List<Cliente> listaCliente = negocio.listar();
                        request.setAttribute("listaCliente", listaCliente);
                        request.setAttribute("msg", "Erro ao inserir o cliente");
                        RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                        rd.forward(request, response);
                    }
                }
            }else{
                int id = Integer.parseInt(idCliente);
                cliente.setId(id);
                if(negocio.alterar(cliente)){
                    request.setAttribute("msg", "Cliente alterado com sucesso!");
                    List<Cliente> listaCliente = negocio.listar();
                    request.setAttribute("listaCliente", listaCliente);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                    rd.forward(request, response);
                }else{
                    List<Cliente> listaCliente = negocio.listar();
                    request.setAttribute("listaCliente", listaCliente);
                    request.setAttribute("msg", "Erro ao alterar o cliente");
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                    rd.forward(request, response);
                }
            }     
        }
        
        //Listar Clientes
        if(action.equals("ListarClientes")){
            ClienteNegocio negocio = new ClienteNegocio();
            List<Cliente> listaCliente = negocio.listar();
            request.setAttribute("listaCliente", listaCliente);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
            rd.forward(request, response);
        }
        
        //Buscar Cliente
        if(action.equals("BuscarCliente")){
            String idCliente = request.getParameter("idEdita");
            int id = Integer.parseInt(idCliente);
            ClienteNegocio negocio = new ClienteNegocio();
            Cliente cliente = negocio.buscar(id);
            request.setAttribute("cliente", cliente);
            List<Cliente> listaCliente = negocio.listar();
            request.setAttribute("listaCliente", listaCliente);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
            rd.forward(request, response);
        }
        
        //Delatar cliente
        if(action.equals("DeletarCliente")){
            String idCliente = request.getParameter("idDel");
            int id = Integer.parseInt(idCliente);
            ClienteNegocio negocio = new ClienteNegocio();
            if(negocio.deletar(id)){
                request.setAttribute("msg", "Cliente excluído com sucesso!");
                List<Cliente> listaCliente = negocio.listar();
                request.setAttribute("listaCliente", listaCliente);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                rd.forward(request, response);
            }else{
                List<Cliente> listaCliente = negocio.listar();
                request.setAttribute("listaCliente", listaCliente);
                request.setAttribute("msg", "Erro ao tentar excluir o cliente");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_cliente.jsp");
                rd.forward(request, response);
            }
            
        }
        
        if(action.equals("CadastrarPedido")){
            ClienteNegocio clienteNegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clienteNegocio.listar();
            request.setAttribute("listaCliente", listaCliente);
            TipoProdutoNegocio tpNegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTipoProduto = tpNegocio.listar();
            request.setAttribute("listaTipoProduto", listaTipoProduto);
            Date d = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format( d ); 
            request.setAttribute("data", d);
            Date nova_data = new Date(d.getTime()+((1000*24*60*60)*5)); 
            formatador.format( nova_data ); 
            request.setAttribute("novaData", nova_data);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("SalvarPedido")){
            String nome = request.getParameter("nome");
            int idCliente = Integer.parseInt(request.getParameter("nomeCli"));
            int idTipoProduto = Integer.parseInt(request.getParameter("tipo"));
            int idPedido;
            String modelo = request.getParameter("modelo");
            String fabricante = request.getParameter("fabricante");
            String obs = request.getParameter("obs");
            String dataE = request.getParameter("dataEntrada");
            String dataP = request.getParameter("dataEntrega");
            String preco = request.getParameter("valor").replace(",", ".");
            double valor = Double.parseDouble(preco);
            if(idCliente == 0){
                ClienteNegocio clienteNegocio = new ClienteNegocio();
                List<Cliente> listaCliente = clienteNegocio.listar();
                request.setAttribute("listaCliente", listaCliente);
                TipoProdutoNegocio tpNegocio = new TipoProdutoNegocio();
                List<TipoProduto> listaTipoProduto = tpNegocio.listar();
                request.setAttribute("listaTipoProduto", listaTipoProduto);
                Date d = new Date();
                SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
                formatador.format( d ); 
                request.setAttribute("data", d);
                Date nova_data = new Date(d.getTime()+((1000*24*60*60)*5)); 
                formatador.format( nova_data ); 
                request.setAttribute("novaData", nova_data);
                request.setAttribute("msg", "É obrigatório selecionar um cliente!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
                rd.forward(request, response);
            }
            if(idTipoProduto == 0){
                ClienteNegocio clienteNegocio = new ClienteNegocio();
                List<Cliente> listaCliente = clienteNegocio.listar();
                request.setAttribute("listaCliente", listaCliente);
                TipoProdutoNegocio tpNegocio = new TipoProdutoNegocio();
                List<TipoProduto> listaTipoProduto = tpNegocio.listar();
                request.setAttribute("listaTipoProduto", listaTipoProduto);
                Date d = new Date();
                SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
                formatador.format( d ); 
                request.setAttribute("data", d);
                Date nova_data = new Date(d.getTime()+((1000*24*60*60)*5)); 
                formatador.format( nova_data ); 
                request.setAttribute("novaData", nova_data);
                request.setAttribute("msg", "É obrigatório selecionar um tipo de produto!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
                rd.forward(request, response);
            }
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dataEntrada = (Date)formatter.parse(dataE); 
            Date dataPrevista = (Date)formatter.parse(dataP); 
            
            Pedido pedido = new Pedido();
            Cliente cliente = new Cliente(idCliente);
            TipoProduto tp = new TipoProduto(idTipoProduto);
            
            pedido.setNome(nome);
            pedido.setModelo(modelo);
            pedido.setFabricante(fabricante);
            pedido.setDescricao(obs);
            pedido.setDtEntrada(dataEntrada);
            pedido.setPreco(valor);
            pedido.setDtConserto(dataPrevista);
            pedido.setCliente(cliente);
            pedido.setTpProduto(tp);
            
            PedidoNegocio negocio = new PedidoNegocio();
            if(negocio.salvar(pedido)){
                ClienteNegocio clienteNegocio = new ClienteNegocio();
                List<Cliente> listaCliente = clienteNegocio.listar();
                request.setAttribute("listaCliente", listaCliente);
                TipoProdutoNegocio tpNegocio = new TipoProdutoNegocio();
                List<TipoProduto> listaTipoProduto = tpNegocio.listar();
                request.setAttribute("listaTipoProduto", listaTipoProduto);
                Date d = new Date();
                SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
                formatador.format( d ); 
                request.setAttribute("data", d);
                Date nova_data = new Date(d.getTime()+((1000*24*60*60)*5)); 
                formatador.format( nova_data ); 
                request.setAttribute("novaData", nova_data);
                idPedido = negocio.buscarUltimoCadastrado();
                String strMsg = "Pedido salvo com sucesso! NÚMERO DO PEDIDO: " + idPedido;
                request.setAttribute("msg", strMsg);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
                rd.forward(request, response);
            }else{
                ClienteNegocio clienteNegocio = new ClienteNegocio();
                List<Cliente> listaCliente = clienteNegocio.listar();
                request.setAttribute("listaCliente", listaCliente);
                TipoProdutoNegocio tpNegocio = new TipoProdutoNegocio();
                List<TipoProduto> listaTipoProduto = tpNegocio.listar();
                request.setAttribute("listaTipoProduto", listaTipoProduto);
                Date d = new Date();
                SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
                formatador.format( d ); 
                request.setAttribute("data", d);
                Date nova_data = new Date(d.getTime()+((1000*24*60*60)*5)); 
                formatador.format( nova_data ); 
                request.setAttribute("novaData", nova_data);
                request.setAttribute("msg", "Erro ao tentar salvar o pedido!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
                rd.forward(request, response);
            }
        }
        
        if(action.equals("ConsertosEmAberto")){
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaEmAberto = negocio.emAberto();
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaEmAberto){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaEmAberto, new ComparaData());
            Date dataAtual = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format(dataAtual);
            Date nova_data = new Date(dataAtual.getTime()+((1000*24*60*60)*2));
            request.setAttribute("dataAtual", dataAtual);
            request.setAttribute("nova_data", nova_data);
            request.setAttribute("listaEmAberto", listaEmAberto);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/index_tecnico.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertarPedido")){
            int idPedido = Integer.parseInt(request.getParameter("idPedido"));
            PedidoNegocio negocio = new PedidoNegocio();
            Pedido pedido = negocio.buscaid(idPedido);
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Cliente c : listaCliente){
                if(c.getId() == pedido.getCliente().getId()){
                        pedido.setCliente(c);
                }
            }
            for(TipoProduto tp : listaTp){
                if(tp.getId() == pedido.getTpProduto().getId()){
                    pedido.setTpProduto(tp);
                }
            }
            Date d = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format( d ); 
            pedido.setDtConsertoFinal(d);
            request.setAttribute("pedido", pedido);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_conserto.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("SalvarConserto")){
            int idPedido = Integer.parseInt(request.getParameter("idPedido"));
            PedidoNegocio negocio = new PedidoNegocio();
            Pedido pedido = negocio.buscaid(idPedido);
            
            String obs = request.getParameter("observacao");
            String dt = request.getParameter("dataConserto");
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dtConsertoFinal = (Date)formatter.parse(dt); 
            pedido.setDtConsertoFinal(dtConsertoFinal);
            pedido.setObservacao(obs);
            
            if(negocio.pedidoConsertado(pedido)){
                request.setAttribute("msg", "Conserto salvo com sucesso!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
                rd.forward(request, response);
            }else{
                request.setAttribute("msg", "Erro ao tentar salvar o conserto!");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/cadastro_pedido.jsp");
                rd.forward(request, response);
            }
        }
        
        if(action.equals("Consertados")){
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaNaoRetirados = negocio.naoRetirados();
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaNaoRetirados){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaNaoRetirados, new ComparaData());
            request.setAttribute("listaNaoRetirados", listaNaoRetirados);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_retirar.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertoRetirado")){
            int idPedido = Integer.parseInt(request.getParameter("idPedido"));
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaNaoRetirados = negocio.naoRetirados();
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaNaoRetirados){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaNaoRetirados, new ComparaData());
            if(!negocio.alteraSituacao(idPedido, 4)){
                request.setAttribute("msg", "Erro ao salvar a retirada!");
                request.setAttribute("listaNaoRetirados", listaNaoRetirados);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_retirar.jsp");
                rd.forward(request, response);
            }else{
                request.setAttribute("msg", "Retirada salva com sucesso!");
                request.setAttribute("listaNaoRetirados", listaNaoRetirados);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_retirar.jsp");
                rd.forward(request, response);
            }
        }
        
        if(action.equals("BuscarPedido")){
            String str = request.getParameter("busca");
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaPedido = negocio.buscarPedido(str);
            request.setAttribute("listaPedido", listaPedido);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consultar_pedido.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("BuscarPedidoNumero")){
            String str = request.getParameter("busca");
            if(!str.equals("")){
                int id = Integer.parseInt(str);
                PedidoNegocio negocio = new PedidoNegocio();
                Pedido pedido = negocio.buscaNumero(id);
                if(pedido.getId() == 0){
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/consulta_numero.jsp");
                    rd.forward(request, response);
                }else{
                    ClienteNegocio clienteNegocio = new ClienteNegocio();
                    List<Cliente> listaCliente = clienteNegocio.listar();
                    for(Cliente c : listaCliente){
                        if(pedido.getCliente().getId() == c.getId()){
                            pedido.setCliente(c);
                        }
                    }
                    TipoProdutoNegocio tpNegocio = new TipoProdutoNegocio();
                    List<TipoProduto> listaTp = tpNegocio.listar();
                    for(TipoProduto tp : listaTp){
                        if(pedido.getTpProduto().getId() == tp.getId()){
                            pedido.setTpProduto(tp);
                        }
                    }
                    request.setAttribute("pedido", pedido);
                    RequestDispatcher rd = getServletContext().getRequestDispatcher("/consulta_numero.jsp");
                    rd.forward(request, response);
                }
            }else{
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consulta_numero.jsp");
                rd.forward(request, response);
            }
        }
        
        if(action.equals("BuscarPeriodo")){
            String dti = request.getParameter("dtInicio");
            String dtf = request.getParameter("dtFim");
            
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dtInicio = (Date)formatter.parse(dti); 
            Date dtFim = (Date)formatter.parse(dtf); 
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaPedido = negocio.buscarPeriodo(dtInicio, dtFim);
            request.setAttribute("listaPedido", listaPedido);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consulta_periodo.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("IndexGerente")){
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaAberto = negocio.emAberto();
            Date data = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format(data);
            List<Pedido> listaAtraso = negocio.emAtraso(data);
            List<Pedido> listaAbertoHoje = negocio.abertoHoje(data);
            List<Pedido> listaConsertoHoje = negocio.consertoHoje(data);
            
            request.setAttribute("listaAberto", listaAberto);
            request.setAttribute("listaAtraso", listaAtraso);
            request.setAttribute("listaAbertoHoje", listaAbertoHoje);
            request.setAttribute("listaConsertoHoje", listaConsertoHoje);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/index_gerente.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertosAtraso")){
            PedidoNegocio negocio = new PedidoNegocio();
            Date data = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format(data);
            List<Pedido> listaAtraso = negocio.emAtraso(data);
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaAtraso){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaAtraso, new ComparaData());
            request.setAttribute("listaAtraso", listaAtraso);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_atraso.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertosPrazo")){
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaAberto = negocio.emAberto();
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaAberto){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaAberto, new ComparaData());
            request.setAttribute("listaAberto", listaAberto);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_prazo.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("AbertoHoje")){
            PedidoNegocio negocio = new PedidoNegocio();
            Date data = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format(data);
            List<Pedido> listaAbertoHoje = negocio.abertoHoje(data);
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaAbertoHoje){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaAbertoHoje, new ComparaData());
            request.setAttribute("listaAbertoHoje", listaAbertoHoje);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/pedidos_atual.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertadoHoje")){
            PedidoNegocio negocio = new PedidoNegocio();
            Date data = new Date();
            SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");  
            formatador.format(data);
            List<Pedido> listaConsertoHoje = negocio.consertoHoje(data);
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaConsertoHoje){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaConsertoHoje, new ComparaData());
            request.setAttribute("listaConsertoHoje", listaConsertoHoje);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_atual.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertosNaoRetirados")){
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaNaoRetirados = negocio.naoRetirados();
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaNaoRetirados){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaNaoRetirados, new ComparaData());
            request.setAttribute("listaNaoRetirados", listaNaoRetirados);
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_nretirados.jsp");
            rd.forward(request, response);
        }
        
        if(action.equals("ConsertoRetiradoG")){
            int idPedido = Integer.parseInt(request.getParameter("idPedido"));
            PedidoNegocio negocio = new PedidoNegocio();
            List<Pedido> listaNaoRetirados = negocio.naoRetirados();
            ClienteNegocio clinegocio = new ClienteNegocio();
            List<Cliente> listaCliente = clinegocio.listar();
            TipoProdutoNegocio tpnegocio = new TipoProdutoNegocio();
            List<TipoProduto> listaTp = tpnegocio.listar();
            for(Pedido p : listaNaoRetirados){
                for(Cliente c : listaCliente){
                    if(c.getId() == p.getCliente().getId()){
                        p.setCliente(c);
                    }
                }
                for(TipoProduto tp : listaTp){
                    if(tp.getId() == p.getTpProduto().getId()){
                        p.setTpProduto(tp);
                    }
                }
            }
            Collections.sort(listaNaoRetirados, new ComparaData());
            if(!negocio.alteraSituacao(idPedido, 4)){
                request.setAttribute("msg", "Erro ao salvar a retirada!");
                request.setAttribute("listaNaoRetirados", listaNaoRetirados);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_nretirados.jsp");
                rd.forward(request, response);
            }else{
                request.setAttribute("msg", "Retirada do produto salva com sucesso!");
                request.setAttribute("listaNaoRetirados", listaNaoRetirados);
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/consertos_nretirados.jsp");
                rd.forward(request, response);
            }
        }
        
        if(action.equals("validaLogin")){
            String login = request.getParameter("login");
            String senha = request.getParameter("senha");
            String local = "/index.jsp";
            HttpSession session = request.getSession();
            
            try{
                UsuarioNegocio negocio = new UsuarioNegocio();
                Usuario usuario = new Usuario();
                
                usuario = negocio.validaLogin(login, senha);
                
                if(usuario.getNrMatricula() != 0){
                    if(usuario.getTpUsuario().getId() == 1){
                        //local = "/index_gerente.jsp";
                        local = "/Controladora?action=IndexGerente";
                    }else{
                        //local = "/index_tecnico.jsp";
                        local = "/Controladora?action=ConsertosEmAberto";
                    }
                    session.setAttribute("usuarioSession", usuario);
                }else{
                    request.setAttribute("msg", "Login ou senha incorretos!");
                }
                
                RequestDispatcher rd = getServletContext().getRequestDispatcher(local);
                rd.forward(request, response);
            }catch(Exception e){
                request.setAttribute("msg", "Erro no sistema de login, favor contatar o administrador.");
                RequestDispatcher rd = getServletContext().getRequestDispatcher(local);
                rd.forward(request, response);
            }
        
        }
        if(action.equals("logout")){
            HttpSession session = request.getSession();
            session.invalidate();
            RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
            rd.forward(request, response);       
        }
        
        if(action.equals("relatorioASeremRetirados")){
            //cria uma conexão
           Connection con = ConnectionFactory.getConnection();
           //caminho do arquivo .jasper
           String jasper = request.getContextPath() + "/relatorio_nao_retirados.jasper";
           //URL do Host em que a servlet esta executando
           String host = "http://" + request.getServerName() + ":" + request.getServerPort();
           //URL do Relatório
           URL jasperURL = new URL(host + jasper);
           //Parâmetros
           HashMap params = new HashMap();  

           try{
               byte[] bytes = JasperRunManager.runReportToPdf(jasperURL.openStream(), params, con);

               if(bytes != null){
                   // seta a pagina para ser mostrada em pdf
                   response.setContentType("application/pdf");
                   //envia o pdf para o cliente
                   OutputStream ops = null;
                   ops = response.getOutputStream();
                   ops.write(bytes);
               }
           }catch(Exception e){
               request.setAttribute("msg", "Erro no Relatório!");                    
               RequestDispatcher rd = getServletContext().getRequestDispatcher("/relatorio.jsp");
               rd.forward(request, response);
           }finally{
               if(con!=null){
                   try{
                       con.close();
                   }catch(Exception e){
                       request.setAttribute("msg", "Erro Fechando a conexão!");                    
                       RequestDispatcher rd = getServletContext().getRequestDispatcher("/relatorio.jsp");
                       rd.forward(request, response);
                   }
               }
           }
        }
        
        if(action.equals("relatorioEmAtraso")){
            Date dataAtual = new java.util.Date();
            
            //cria uma conexão
            Connection con = ConnectionFactory.getConnection();
            //caminho do arquivo .jasper
            String jasper = request.getContextPath() + "/relatorio_em_atraso.jasper";
            //URL do Host em que a servlet esta executando
            String host = "http://" + request.getServerName() + ":" + request.getServerPort();
            //URL do Relatório
            URL jasperURL = new URL(host + jasper);
            //Parâmetros
            HashMap params = new HashMap(); 
            //passa a data atual como parâmetro
            params.put("dataAtual", dataAtual);
            
                       try{
               byte[] bytes = JasperRunManager.runReportToPdf(jasperURL.openStream(), params, con);

               if(bytes != null){
                   // seta a pagina para ser mostrada em pdf
                   response.setContentType("application/pdf");
                   //envia o pdf para o cliente
                   OutputStream ops = null;
                   ops = response.getOutputStream();
                   ops.write(bytes);
               }
           }catch(Exception e){
               request.setAttribute("msg", "Erro no Relatório!");                    
               RequestDispatcher rd = getServletContext().getRequestDispatcher("/relatorio.jsp");
               rd.forward(request, response);
           }finally{
               if(con!=null){
                   try{
                       con.close();
                   }catch(Exception e){
                       request.setAttribute("msg", "Erro Fechando a conexão!");                    
                       RequestDispatcher rd = getServletContext().getRequestDispatcher("/relatorio.jsp");
                       rd.forward(request, response);
                   }
               }
           } 
        }
        
        if(action.equals("relatorioConsertados")){
            String dti = request.getParameter("dataInicio");
            String dtf = request.getParameter("dataFinal");
            
            DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");  
            Date dataInicio = (Date)formatter.parse(dti); 
            Date dataFinal = (Date)formatter.parse(dtf); 
            
                        //cria uma conexão
            Connection con = ConnectionFactory.getConnection();
            //caminho do arquivo .jasper
            String jasper = request.getContextPath() + "/relatorio_consertados.jasper";
            //URL do Host em que a servlet esta executando
            String host = "http://" + request.getServerName() + ":" + request.getServerPort();
            //URL do Relatório
            URL jasperURL = new URL(host + jasper);
            //Parâmetros
            HashMap params = new HashMap(); 
            //passa a data atual como parâmetro
            params.put("dataInicio", dataInicio);
            params.put("dataFinal", dataFinal);
            
                       try{
               byte[] bytes = JasperRunManager.runReportToPdf(jasperURL.openStream(), params, con);

               if(bytes != null){
                   // seta a pagina para ser mostrada em pdf
                   response.setContentType("application/pdf");
                   //envia o pdf para o cliente
                   OutputStream ops = null;
                   ops = response.getOutputStream();
                   ops.write(bytes);
               }
           }catch(Exception e){
               request.setAttribute("msg", "Erro no Relatório!");                    
               RequestDispatcher rd = getServletContext().getRequestDispatcher("/relatorio.jsp");
               rd.forward(request, response);
           }finally{
               if(con!=null){
                   try{
                       con.close();
                   }catch(Exception e){
                       request.setAttribute("msg", "Erro Fechando a conexão!");                    
                       RequestDispatcher rd = getServletContext().getRequestDispatcher("/relatorio.jsp");
                       rd.forward(request, response);
                   }
               }
           } 
        
        }
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP
     * <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (ParseException ex) {
            Logger.getLogger(Controladora.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Handles the HTTP
     * <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (ParseException ex) {
            Logger.getLogger(Controladora.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Returns a short description of the servlet.
     *
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
